注意:所有文章除特别说明外,转载请注明出处.
第十章 深入理解Cookie和Session
[TOC]
Session和Cookie的作用都是为了保持访问用户与后端服务器的交互状态。
Cookie在传递信息时,随着Cookie个数的增多和访问量的增加,它占用的网络带宽也很大。
10.1 Cookie
Cookie可以让服务端程序跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些Cookie,如果Cookie很多无疑增加客户端与服务器的数据传输量。
10.1.1 Cookie属性项
常用的属性:SetCookie
10.1.2 Cookie工作
10.1.3 Cookie限制
Cookie只是HTTP协议头中的一个字段,虽然HTPP协议本身没有对这个字段有多少限制,但是Cookie最终还是存储在浏览器里,所以不同的浏览器会对Cookie的大小和数量有限制。
10.2 Session
同一客户端每次和服务端交互时,不需要每次都传回所有Cookie值,而是传回一个ID,这个ID时客户端第一次访问服务器的时候生成的,而且每个客户端是唯一的。该ID通常是NAME为JSESIONID的一个Cookie。
10.2.1 Session 与 Cookie
Session基于Cookie来工作
1.
10.3 Cookie安全问题
1. Cookie
Cookie通常情况下是将所有要保存的数据通过HTTP协议的头部从客户端传递到服务器,又从服务端传回客户端,所有的数据都存储在客户端的浏览器中,所以这些Cookie数据都能够被访问到。
2. Session
Session将数据保存在服务器,所以Session更适合存储用户隐私和重要数据。
10.4 分布式Session框架
10.4.1 Cookie的限制
1. 客户端cookie存储限制 不同浏览器中cookie存储个数的限制
2. cookie管理混乱
因为如果每个应用系统都有自己管理的应用cookie,将会导致混乱。但由于通常应用系统都在同一个域名下,cookie又有存储限制,所以没有统一管理很容易出现cookie超出限制的混乱。
3. 安全
10.4.2 Session的优势
1. Session配置的统一管理
2. Cookie使用的监控和统一规范管理
3. Session存储的多元化
4. Session配置的动态修改
5. Session加密key的定期修改
6. 充分的容灾机制,保持框架的使用稳定性
...
9. 跨域名Session和cookie如何共享,现在一个网站可能存在多个域名,所以跨域问题需要解决
10.5 Cookie压缩
10.6 表单重复提交问题
能够防止表单重复提交,就需要标识用户的每一个访问请求,使得每一次访问对服务器来说都是唯一确定的。
这里为了标识用户的每次访问请求,可以在用户请求一个表单域时增加一个隐藏表单项,这个表单项的值每次都是唯一的token。